/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.manager.criar;

import br.com.foxinline.modelo.*;
import br.com.foxinline.servico.*;
import br.com.foxinline.utilitario.Msg;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author laverson
 */
@ViewScoped
@ManagedBean
public class ManagerCriarOfertaDisciplina implements Serializable {

    @EJB
    DisciplinaServico disciplinaServico;
    @EJB
    CursoServico cursoServico;
    @EJB
    DocenteServico docenteServico;
    @EJB
    OfertaDisciplinaServico ofertaDisciplinaServico;
    @EJB
    UsuarioServico usuarioServico;
    @EJB
    HorarioServico horarioServico;
    private OfertaDisciplina ofertaDisciplina;
    private Docente docente;
    private List<Docente> docentes;
    private Disciplina disciplina;
    private List<Disciplina> disciplinas;
    private Curso curso;
    private List<Curso> cursos;
    private Horario horario;
    private Horario horarioDiaSemana;
    private List<Horario> horarios;

    @PostConstruct
    public void init() {
        curso = isAdmin() ? new Curso() : usuarioServico.getCurrentUser().getCurso();
        cursos = cursoServico.pesquisarTodos();
        horario = new Horario();
        disciplina = new Disciplina();
        disciplinas = new ArrayList<Disciplina>();
        docente = new Docente();
        docentes = new ArrayList<Docente>();
        ofertaDisciplina = new OfertaDisciplina();

        handleMudarDisciplinas();
    }

    public void salvar() {
        try {
            ofertaDisciplina.setHorario(horario);
            ofertaDisciplina.setDocente(docente);
            ofertaDisciplina.setDisciplina(disciplina);
            ofertaDisciplinaServico.salvar(ofertaDisciplina);
            Msg.messagemInfo(Msg.SuccessFull);
            init();
        } catch (Exception e) {
            e.printStackTrace();
            Msg.messagemError(Msg.Failure);
        }
    }

//    public List<SelectItem> getDiasSemana() {
//        List<SelectItem> items = new ArrayList<SelectItem>();
//        for (DiasSemana tipo : DiasSemana.values()) {
//            items.add(new SelectItem(tipo, tipo.getSigla()));
//        }
//        return items;
//    }
    public void handleMudarDisciplinas() {
        if (curso != null && curso.getId() != null) {
            disciplinas = disciplinaServico.pesquisar(usuarioServico.getCurrentUser().getCurso());
        } else {
            disciplinas = new ArrayList<Disciplina>();
        }
    }

    public void handleMudarDocente() {
        if (disciplina != null) {
            docentes = docenteServico.pesquisar(disciplina, curso);
        } else {
            docentes = new ArrayList<Docente>();
        }
    }

    public boolean isAdmin() {
        return usuarioServico.isAdmin();
    }

    public List<Horario> horarios() {
        return horarioServico.pesquisarTodos();
    }

    public void handleHorarioInicialFinal() {
        System.err.println(horarioDiaSemana);
        if (horarioDiaSemana != null && horarioDiaSemana.getId() != null) {
            System.err.println("if");
            horarios = horarioServico.pesquisarDistintos(horarioDiaSemana);
        }

        horarios = new ArrayList<Horario>();
    }

    public String horarioDiasSemana(Horario horario) {
        String diasSemana = "| ";
        List<ItemHorario> itens = horario.getItemHorario();

        for (ItemHorario item : horario.getItemHorario()) {
            diasSemana += item.getDiaSemana().getSigla() + " | ";
        }

        return diasSemana;
    }

    public String horarioInicialFinal(Horario horario) {
        String horarioDiasSemana = "";
        List<ItemHorario> itens = horario.getItemHorario();

        for (int i = 0; i < itens.size(); i++) {

            GregorianCalendar g = new GregorianCalendar();
            g.setTime(new Date());

            String horarioInicial = new SimpleDateFormat("HH:mm", new Locale("pt", "br")).format(itens.get(0).getHorarioInicial().getTime());
            String horarioFinal = new SimpleDateFormat("HH:mm", new Locale("pt", "br")).format(itens.get(0).getHorarioFinal().getTime());

            horarioDiasSemana += horarioInicial + " às " + horarioFinal;
        }

        return horarioDiasSemana;
    }

    public Disciplina getDisciplina() {
        return disciplina;
    }

    public void setDisciplina(Disciplina disciplina) {
        this.disciplina = disciplina;
    }

    public Curso getCurso() {
        return curso;
    }

    public void setCurso(Curso curso) {
        this.curso = curso;
    }

    public List<Curso> getCursos() {
        return cursos;
    }

    public void setCursos(List<Curso> cursos) {
        this.cursos = cursos;
    }

    public Docente getDocente() {
        return docente;
    }

    public void setDocente(Docente docente) {
        this.docente = docente;
    }

    public OfertaDisciplina getOfertaDisciplina() {
        return ofertaDisciplina;
    }

    public void setOfertaDisciplina(OfertaDisciplina ofertaDisciplina) {
        this.ofertaDisciplina = ofertaDisciplina;
    }

    public List<Disciplina> getDisciplinas() {
        return disciplinas;
    }

    public void setDisciplinas(List<Disciplina> disciplinas) {
        this.disciplinas = disciplinas;
    }

    public List<Docente> getDocentes() {
        return docentes;
    }

    public void setDocentes(List<Docente> docentes) {
        this.docentes = docentes;
    }

    public Horario getHorario() {
        return horario;
    }

    public void setHorario(Horario horario) {
        this.horario = horario;
    }

    public Horario getHorarioDiaSemana() {
        return horarioDiaSemana;
    }

    public void setHorarioDiaSemana(Horario horarioDiaSemana) {
        this.horarioDiaSemana = horarioDiaSemana;
    }

    public List<Horario> getHorarios() {
        return horarios;
    }

    public void setHorarios(List<Horario> horarios) {
        this.horarios = horarios;
    }
}